package com.wa.controller.exceptions;

import com.wa.exceptions.TestResponseStatusException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

/**
 * 响应码测试
 *
 * @author gary
 * @date 2021年12月15日 11:35
 */
@RestController
@RequestMapping("/responseStatus")
public class ResponseStatusController {

    /** 127.0.0.1:8080/responseStatus/test
     * 当在处理同步请求时使用@ResponseStatus（我觉得没啥意义）：
     * （1）如果不使用@ResponseStatus，在处理方法正确执行的前提下，后台返回HTTP响应的状态码为200，浏览器正常渲染视图；
     * （2）如果使用@ResponseStatus，在处理方法正确执行的前提下，后台返回HTTP响应的状态码为@ResponseStatus指定的状态码，但是浏览器依然可以正常渲染视图（在不使用@ResponseStatus的reson属性情况下），这样以来，仅仅去改变状态码就显得没啥意义了。
     */
    @GetMapping("/test")
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public String testUser(String name) {
        return name;
    }

    /** http://127.0.0.1:8080/responseStatus/testException
     * 加在自定义运行时异常上
     * （1）如果不加@ResponseStatus，在代码中直接抛出该自定义异常，会以500的HTTP状态码响应到浏览器；
     * （2）如果加@ResponseStatus，在代码中直接抛出该自定义异常，会以指定的HTTP状态码和指定的reson响应到浏览器；我们自定义异常的目的就是为了让它正确表述我们的思想，所以给其设置响应状态码和原因让其准确表达我们的目的。
     */
    @GetMapping("/testException")
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public String testException(String name) {
        try {
            throw new TestResponseStatusException();
        } catch (TestResponseStatusException e) {
            throw e;
        }
    }
}
